/**
 * @file CCdiant.h
 * @brief Fichier d'entête du module CC.
 *
 * @author Mohammad NOROUZZADEH, Lotfi, Saleh
 */
#ifndef _APPLICATION_H
#define _APPLICATION_H


/* ********************************************************************* */
/*                                                                       */
/*                       Librairies de Application                       */
/*                                                                       */
/* ********************************************************************* */
#include <stdlib.h>
#include <gtk/gtk.h>
#include <stdio.h>
#include <string.h>

#include "Etudiant.h"
#include "Login.h"
#include "Controle.h"
#include "IP.h"
#include "Enseigne.h"
#include "Chemin.h"
#include "Enseignement.h"
#include "ResponsableEtu.h"
#include "Salle.h"


/* ********************************************************************* */
/*                                                                       */
/*                        Définitions de types                           */
/*                                                                       */
/* ********************************************************************* */
/**
 * @fn void ajouterLogin(Login*log);
 * @brief ajouterLogin

 * @param[in] log

 * @return 0 si tout est OK
 */
void ajouterLogin(Login*log);

/**
 * @fn void ajouterEtu(Etu*etu);
 * @brief ajouterEtu

 * @param[in] etu

 * @return 0 si tout est OK
 */
void ajouterEtu(Etu*etu);

/**
 * @fn void ajouterEns(Ens*enseignant);
 * @brief ajouterEns

 * @param[in] enseignant

 * @return 0 si tout est OK
 */
void ajouterEns(Ens*enseignant);

/**
 * @fn void ajouterUE(UE*ue);
 * @brief ajouterUE

 * @param[in] ue

 * @return 0 si tout est OK
 */
void ajouterUE(UE*ue);

/**
 * @fn void ajouterEnseigne(Ens*enseignant,UE*ue,int ensCM,int  ensTD,int  ensTP);
 * @brief ajouterEnseigne

 * @param[in] enseignant
 * @param[in] ue
 * @param[in] ensCM
 * @param[in] ensTD
 * @param[in] ensTP

 * @return 0 si tout est OK
 */
void ajouterEnseigne(Ens*enseignant,UE*ue,int ensCM,int  ensTD,int  ensTP);

/**
 * @fn void ajouterIp(IP*ip);
 * @brief ajouterIp

 * @param[in] ip

 * @return 0 si tout est OK
 */
void ajouterIp(IP*ip);

/**
 * @fn void ajouterEnseignement(Enseignement    *enseignement);
 * @brief ajouterEnseignement

 * @param[in, out] enseignement

 * @return 0 si tout est OK
 */
void ajouterEnseignement(Enseignement    *enseignement);

/**
 * @fn void  affecterRespAUe(Ens*ens,UE*ue);
 * @brief affecterRespAUe

 * @param[in] ens
 * @param[in] ue

 * @return 0 si tout est OK
 */
void  affecterRespAUe(Ens*ens,UE*ue);

/**
 * @fn void  precenseEtudiantAEnseignemet(Etu*etu,Enseignement*Enseignement,char* etat);
 * @brief precenseEtudiantAEnseignemet

 * @param[in] etu
 * @param[in] Enseignement
 * @param[in] etat

 * @return 0 si tout est OK
 */
void  precenseEtudiantAEnseignemet(Etu*etu,Enseignement*Enseignement,char* etat);

/**
 * @fn test();
 * @brief test

 * @return 0 si tout est OK
 */
void test();


/**
 * @fn int supprimerLogin(Login*login);
 * @brief supprimerLogin

 * @param[in] login
 * @return -1 s'il n'existe pas.
 * @return 0 s'il supprime.
 */
int supprimerLogin(Login*login);

/**
 * @fn int supprimerEtudiant(Etu*etu);
 * @brief supprimerEtudiant

 * @param[in] etu
 * @return -1 s'il n'existe pas.
 * @return 0 s'il supprime.
 */
int supprimerEtudiant(Etu*etu);

/**
 * @fn int supprimerEnseignant(Ens*ens);
 * @brief supprimerEnseignant

 * @param[in] ens
 * @return -1 s'il n'existe pas.
 * @return 0 s'il supprime.
 */
int supprimerEnseignant(Ens*ens);

/**
 * @fn int supprimerUE(UE*ue);
 * @brief supprimerUE

 * @param[in] ue
 * @return -1 s'il n'existe pas.
 * @return 0 s'il supprime.
 */
int supprimerUE(UE*ue);

/**
 * @fn int suprimerEnseigne(Enseigne*enseigne);
 * @brief suprimerEnseigne

 * @param[in] enseigne
 * @return -1 s'il n'existe pas.
 * @return 0 s'il supprime.
 */
int suprimerEnseigne(Enseigne*enseigne);

/**
 * @fn int suprimerIp(IP*ip);
 * @brief suprimerIp

 * @param[in] ip
 * @return -1 s'il n'existe pas.
 * @return 0 s'il supprime.
 */
int suprimerIp(IP*ip);

/**
 * @fn int suprimerEnseignement(Enseignement * enseignement);
 * @brief suprimerEnseignement

 * @param[in] enseignement
 * @return -1 s'il n'existe pas.
 * @return 0 s'il supprime.
 */
int suprimerEnseignement(Enseignement    *enseignement);


/**
 * @fn int modifierEnseigne(Ens*enseignant,UE*ue,int ensCM,int  ensTD,int  ensTP);
 * @brief modifierEnseigne.
 *
 * @param[in] enseignant.
 * @param[in] ue.
 * @param[in] ensCM.
 * @param[in] ensTD.
 * @param[in] ensTP.

 * @return -1 s'il n'existe pas.
 * @return 1 s'il modifie.
 * @return 0 si non.
 */
int modifierEnseigne(Ens*enseignant,UE*ue,int ensCM,int  ensTD,int  ensTP);

/**
 * @fn int modifierEtudiant(Etu*etu,Etu*etunew);
 * @brief modifierEtudiant.
 *
 * @param[in] etu.
 * @param[in] etunew.

 * @return -1 s'il n'existe pas.
 * @return 1 s'il modifie.
 * @return 0 si non.
 */
int modifierEtudiant(Etu*etu,Etu*etunew);

/**
 * @fn int modifierEnseignant(Ens*ens,Ens*ensnew);
 * @brief modifierEnseignant.
 *
 * @param[in] ens.
 * @param[in] ensnew.

 * @return -1 s'il n'existe pas.
 * @return 1 s'il modifie.
 * @return 0 si non.
 */
int modifierEnseignant(Ens*ens,Ens*ensnew);

/**
 * @fn int modifierLgin(Login*log,Login*lognew);
 * @brief modifierLgin.
 *
 * @param[in] log.
 * @param[in] lognew.

 * @return -1 s'il n'existe pas.
 * @return 1 s'il modifie.
 * @return 0 si non.
 */
int modifierLgin(Login*log,Login*lognew);

/**
 * @fn int modifierUE(UE*ue,UE*uenew);
 * @brief modifierUE.
 *
 * @param[in] ue.
 * @param[in] uenew.

 * @return -1 s'il n'existe pas.
 * @return 1 s'il modifie.
 * @return 0 si non.
 */
int modifierUE(UE*ue,UE*uenew);

/**
 * @fn int modifierEnseignement(Enseignement   *enseignement,Enseignement*  enseignementNew);
 * @brief modifierEnseignement.
 *
 * @param[in] enseignement.
 * @param[in] enseignementNew.

 * @return -1 s'il n'existe pas.
 * @return 1 s'il modifie.
 * @return 0 si non.
 */
int modifierEnseignement(Enseignement   *enseignement,Enseignement*  enseignementNew);


/**
 * @fn int inscrireEtudiantUe(Etu*etu,UE*ue,int annee,char semestre);
 * @brief inscrireEtudiantUe.
 *
 * @param[in] etu.
 * @param[in] ue.
 * @param[in] annee.
 * @param[in] semestre.

 * @return 0 s'il inscrit.
 * @return -1 si non.
 */
int inscrireEtudiantUe(Etu*etu,UE*ue,int annee,char semestre);

/**
 * @fn int desinscrireEtudiantUe(Etu*etu,UE*ue);
 * @brief desinscrireEtudiantUe.
 *
 * @param[in] etu.
 * @param[in] ue.

 * @return 0 s'il deinscrit.
 * @return -1 si non.
 */
int desinscrireEtudiantUe(Etu*etu,UE*ue);


/**
 * @fn int affectationAutomatiqueEtudiantGroupe(UE*ue,int  nbGroupe);
 * @brief affectationAutomatiqueEtudiantGroupe.
 *
 * @param[in] ue.
 * @param[in] nbGroupe.

 * @return 0 s'il est ok.
 * @return -1 si non.
 */
int affectationAutomatiqueEtudiantGroupe(UE*ue,int  nbGroupe);

/**
 * @fn int affecterEtudiantAGroupe(Etu*etu,UE*ue,char c);
 * @brief affecterEtudiantAGroupe.
 *
 * @param[in] etu.
 * @param[in] ue.
 * @param[in] char.

 * @return 0 s'il est ok.
 * @return -1 si non.
 */
int affecterEtudiantAGroupe(Etu*etu,UE*ue,char c);


/**
 * @fn TabUe* recupererUeEnseignee(Ens*ens);
 * @brief recupererUeEnseignee.
 *
 * @param[in] ens.

 * @return TabUe.
 * @return NULL si non.
 */
TabUe* recupererUeEnseignee(Ens*ens);

/**
 * @fn TabEnseignant*  recuperEnseignantUe(UE*ue);
 * @brief recuperEnseignantUe.
 *
 * @param[in] ue.

 * @return TabEnseignant.
 * @return NULL si non.
 */
TabEnseignant*  recuperEnseignantUe(UE*ue);

/**
 * @fn TabEtu* recupererEtudiantUe(UE*ue);
 * @brief recupererEtudiantUe.
 *
 * @param[in] ue.

 * @return TabEtu.
 * @return NULL si non.
 */
TabEtu* recupererEtudiantUe(UE*ue);



#endif
